home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / taropyon / cci / cci.doc < prev    next >
Text File  |  1994-09-14  |  18KB  |  463 lines

  1. ==========================================================================
  2.             C language interpreter CCI ver.1.01a
  3.                                             (C) Copyright 1993, TaroPYON
  4. ==========================================================================
  5.  
  6.  HEwin の各種カスタマイズ,機能拡張用に内蔵されているC言語ライクなインタ
  7. プリタ言語,CCI のスタンドアローン版です。すなわち,HEwin からCCI 部分だけ
  8. を取り出したものです。
  9.  
  10.  現バージョンのCCI では構造体が使えませんが,言語仕様はほぼC言語と同じで
  11. す。
  12.  ライブラリ関数として,C標準関数,グラフィック/サウンド関連の関数がたく
  13. さん用意されています。また,HEwin ライクなGUI インターフェースをサービス関
  14. 数も用意されており,メニューやファイルダイアログも簡単に使うことができます。
  15.  
  16.  
  17. **************************************************************************
  18. ☆  収録ファイル一覧
  19. **************************************************************************
  20.  
  21.   ┌───────┬───────────────────────┐
  22.   │ファイル名    │内容                                          │
  23.   ├───────┼───────────────────────┤
  24.   │cci     .doc  │説明ファイル(本ファイル)                    │
  25.   │cci     .exp  │CCI 本体実行プログラム                        │
  26.   │cci     .dll  │CCI インタプリタDLL                           │
  27.   │regex   .dll  │CCI 正規表現用DLL                             │
  28.   ├───────┼───────────────────────┤
  29.   │runcci  .bat  │CCI プログラム実行用バッチファイル            │
  30.   ├───────┼───────────────────────┤
  31.   │ccilib  .h    │CCI プログラム用ヘッダファイル                │
  32.   │hello   .c    │CCI プログラムサンプル(文字列表示)          │
  33.   │hello2  .c    │CCI プログラムサンプル(文字列表示2)        │
  34.   │itmlist .c    │CCI プログラムサンプル(アイテム情報表示)    │
  35.   │install .c    │CCI プログラムサンプル(インストラーラー)    │
  36.   │find    .c    │CCI プログラムサンプル(パターン検索)        │
  37.   │find2   .c    │CCI プログラムサンプル(パターン検索2)       │
  38.   │tifload .c    │CCI プログラムサンプル(TIF データ表示)      │
  39.   │eupplay .c    │CCI プログラムサンプル(EUP データ演奏)      │
  40.   └───────┴───────────────────────┘
  41.  
  42.  
  43. **************************************************************************
  44. ☆  使用,転載,再配付について
  45. **************************************************************************
  46.  
  47.  このプログラムは著作権は放棄していません。
  48.  以下の条件に従って自由に使用してください。
  49.  
  50.     1.  著作権表示を変更しないこと。
  51.     2.  このプログラムを使用したことによって生じた損害はまったく保証しない。
  52.     3.  作者はこのプログラムに不備があっても,それを訂正する義務を負わない。
  53.     4.  収録されているすべてのファイルを一括して配付すること。
  54.  
  55.  感想・障害報告等,作者への連絡は,
  56.         NIFTY-Serve           ID:PAH01170
  57. まで,願いします。
  58.  電子メールでのお問い合わせは返事が遅れたり,あるいは返信のメールが行かな
  59. いこともありますので,予めご了承ください。
  60.  
  61.  転載,再配付については作者の許諾を得る必要はありません。
  62.  
  63.  
  64. **************************************************************************
  65. ☆  CCIとは?
  66. **************************************************************************
  67.  
  68.  CCI はC言語ライクなインタプリタ言語です。
  69.  もともとはMIYAZAKI氏が設計・開発されたもので,MIYAZAKI氏の許可をもらい
  70. TOWNS 用に移植しました。
  71.  CCI の言語仕様はC言語とほぼ同じですが,構造体がありません。また,インタ
  72. プリタという仕様上の制限もあります。
  73.  
  74.  ライブラリ関数として,C標準関数,TOWNS のグラフィックやサウンド機能を使
  75. うことができます。また,HEwin ライクなGUI インターフェースをサービス関数も
  76. 用意されており,メニューやファイルダイアログも簡単に使うことができます。
  77.  
  78.  インタプリタといえばTOWNS ユーザーにはF-BASIC386がもっとも知られていると
  79. 思いますが,CCI はF-BASIC386とはプログラミング方法や環境はまったく異なりま
  80. す。
  81.  CCI はプログラム内部においてインタプリタとして動作しているというだけで,
  82. プログラミング的にはむしろコンパイラのほうに近いものとなっています。
  83.  
  84.  F-BASIC ならば,プログラムが完成していない状態でもとりあえず実行(RUN )
  85. させることができますが,CCI で作成したプログラムは動く程度には完成してい
  86. なければ実行させることはできません。
  87.  F-BASIC は,文法的な誤りがあったとしても,誤りがある箇所の直前までは動き
  88. ますが,CCI では文法的な誤りがあったらそのプログラムはまったく動きません。
  89.  
  90.  また,CCI で作成されたプログラム動作中はエラー検出はすべてユーザー任せな
  91. ので,誤ったプログミングをすると簡単に暴走します。
  92.  無限ループを作ってしまうと復帰する手段がありませんので,TOWNS をリセット
  93. するしかなくなります。F-BASIC386のように [BREAK]キーを押せばいつでも止まる
  94. とはいかないのです。
  95.  
  96.  CCI はプログラムにミスがあっても「○○行にエラーがあります」という表示を
  97. するだけで,詳しい内容などは教えてくれません。しかもその表示されているエラ
  98. ー箇所(ソースリストの行番号)も正しいとはかぎりません(たいていはそれより
  99. も前にエラーが発生しています)。
  100.  
  101.  なげやりな言い方をすれば,「正しく動くプログラムだけが動く」という仕様な
  102. のです。
  103.  
  104.  
  105. **************************************************************************
  106. ☆  CCIの使い方
  107. **************************************************************************
  108.  
  109. ■書式
  110.  
  111.     RUN386 CCI <オプション> <CCI プログラム名> [-- <パラメータ>]
  112.  
  113.     <オプション>
  114.         -codeSize <n>       コードサイズ指定(Kバイト単位,デフォルト
  115.                             128Kバイト)
  116.         -heepSize <n>       ヒープサイズ指定(Kバイト単位,デフォルト
  117.                             64Kバイト)
  118.         -dspInit            画面初期化指定
  119.                             このオプションを指定すると,CCI.EXP 起動後
  120.                             に画面を自動的に初期化し,エラーメッセージ
  121.                             はグラフィック画面に表示されます。
  122.                             このオプションの指定がない場合には,画面の
  123.                             初期化は行われず,エラーメッセージ表示はコ
  124.                             ンソールに対して行われます。
  125.  
  126. 【解説】
  127.  CCI.EXP はTownsMENU にアイテム登録するか,コマンドモード(コンソール)
  128. からRUN386を介して起動,使用します。
  129.  CCI.EXP はCCI 用に作成されたプログラムを動作させるために必要なプログラ
  130. ム,つまりランタイムルーチン的なものです。
  131.  CCI.EXP を使うというのは,CCI 用に作成されたプログラムを動かすことです。
  132. よって,CCI.EXP を使う場合には,CCI 用に作成されたプログラムを予め用意し
  133. ておかなければなりません。
  134.  <CCI プログラム名>の部分には,CCI 用に作成されたプログラムのファイル名
  135. を指定します。拡張子.CCIは省略できます。
  136.  <オプション>はCCI.EXP の対するオプションパラメータです。-codeSize と-h
  137. eepSizeは通常は使われることはないと思います。もし,使う機会があるとすれば,
  138. 巨大なCCI プログラムを動かす場合や,実装メモリが少ないために少しでもフリー
  139. メモリを確保したい場合でしょう。
  140.  -dspInitは,CCI.EXP をTownsMENU やHEwin の子プロセスとして起動する場合
  141. に指定すると便利です。通常,CCI.EXP はエラーメッセージをコンソールに出力
  142. します。よって,TownsMENU やHEwin というコンソールのない環境でCCI.EXP を
  143. 使うと,エラーが起こった場合にエラーメッセージが表示されません。-dspInit
  144. を指定しておくと,エラーメッセージはグラフィック画面に出力されるので,き
  145. ちんと知ることができます。
  146.  
  147.  <パラメータ>には,CCI プログラム用のパラメータを指定します。CCI プログ
  148. ラムがパラメータを必要としない場合には,指定する必要はありません。
  149.  CCI プログラム用のパラメータを指定する場合には,「--」を必ず指定してく
  150. ださい。
  151.  
  152.  
  153. 【使用例】
  154.  
  155.     RUN386 CCI install
  156.         …install.cci を実行する。
  157.  
  158.     RUN386 -dspInit install
  159.         …install.cci を実行する。
  160.  
  161.     RUN386 find -- test.c
  162.         …find.cciを実行する。find.cciのパラメータとしてtest.cを指定
  163.  
  164.  
  165. ■  サンプルプログラムの使い方
  166.  
  167.  CCI で作成したサンプルプログラムをいくつか収録しています。
  168.  拡張子が.Cとなっているファイルはすべてサンプルプログラムですので,CCI 
  169. プログラムを自分で作成しようと思っている方は参考にしてください。
  170.  どのプログラムもcpp (プリプロセッサ)を使わないと,実行できませんので
  171. 注意してください。
  172.  プリプロセッサcpp.exe はフリーソフトウェアコレクション6の¥TAROPYON¥
  173. HEWIN¥CCISRC の配下に収録されています。これを複写しておいてください。
  174.  たとえば,install.c を動かすときには,まずcpp を使って変換します。
  175.  
  176.     cpp -d__CCI__  install.c  > install.cci
  177.  
  178.  上の例の場合,変換後のファイルはinstall.cci となります。
  179.  CCI.EXP を使って実行するのは,このinstall.cci です。
  180.  これを実行するときは,コマンドモードから,
  181.  
  182.     RUN386 cci install
  183.  
  184. とします。
  185.  TownsMENU にアイテム登録してから実行するときも,パラメータにはcpp で変換
  186. したプログラムのファイル名を指定してください。ファイル名はなるべくドライブ
  187. 名とルートから指定したフルパスで指定してください。
  188.  
  189.     アイテム登録時のパラメータの例:    E:¥CCI¥install.cci
  190.  
  191.  サンプルプログラムとして収録されているCCI プログラムの中には,コマンドモ
  192. ードから使うことを前提に作成されているものがあります。
  193.  コマンドモード上の動作を前提に作成されたCCI プログラムをTownsMENU にアイ
  194. テム登録するときは,アイテムの種別を「MS-DOS」に指定してください。
  195.  HEwin からCCI を使う場合には,コマンドモードでの動作を前提にしたプログラ
  196. ムは正常に動かすことはできません。
  197.  
  198.  このようにCCI プログラムを動かすときには,いったんcpp を使う必要がありま
  199. す。このため,RUNCCI.BATというcpp を使ってからCCI.EXP を起動するバッチファ
  200. イルも用意しました。
  201.  RUNCCI.BATを利用すると,上のinstall.cci を動かす場合には,
  202.  
  203.     RUNCCI install
  204.  
  205. とすれば大丈夫です。
  206.  RUNCCI.BATをTownsMENU にアイテム登録して使うこともできます。
  207.  
  208.  RUNCCIを使った場合,2番目以降のパラメータはCCI プログラムのパラメータと
  209. なります。
  210.  たとえば,
  211.     RUNCCI find test.c
  212. は,
  213.     RUN386 cci find -- test.c
  214. となります。
  215.  
  216.     ※  RUNCCI.BAT はHEwin から利用することはできません。
  217.  
  218.  
  219. ●HELLO.C            :"Hello, world."を表示する
  220.  
  221.  hello.c は"Hello, world."という文字列を画面に表示するプログラムです。
  222.  このプログラムはコマンドモードで使ってください。
  223.  
  224. 【書式】
  225.         RUNCCI hello
  226.  
  227. ●HELLO2.C          :"Hello, world."を表示する
  228.  
  229.  hello2.cは"Hello, world."という文字列を画面に表示するプログラムです。
  230.  hello.c と違い,コマンドモードでなくとも動作します。
  231.  
  232. 【書式】
  233.         RUNCCI hello2
  234.  
  235. ●ITMLIST.C        :アイテム登録情報表示プログラム
  236.  
  237.  itmlist.c はカレントドライブ上のTMENU.ITMというファイルから,TownsMENU 
  238. のアイテム登録情報を表示するプログラムです。
  239.  このプログラムはコマンドモードで使ってください。
  240.  
  241. 【書式】
  242.         RUNCCI itmlist
  243.  
  244. ●INSTALL.C        :インストーラーサンプル
  245.  
  246.  install.c は,TownsOS V2.1用のインストーラー(インストールプログラム)
  247. のサンプルです。
  248.  install.cci を実行すると,「CCI のインストールを行いますか?」という確認
  249. のメッセージが表示されます。
  250.  「INSTALL : [実行]」というボタンを左クリックするとファイルダイアログが現
  251. れますので,インストール先に移動してください。
  252.  インストール先を指定すると,<CCI> という名前のディレクトリを作成してもい
  253. いかどうか尋ねてきます。ディレクトリを作成してもいい場合は,「MKDIR : [実
  254. 行]」 を左クリックしてください。「CANCEL : [取消]」 を左クリックすると,最
  255. 初のインストールの確認に戻ります。
  256.  ディレクトリが既に存在している場合は,ディレクトリを作成してもいいかかど
  257. うかの確認は行われません。
  258.  次に,本当にインストールしてもいいかどうか確認してきます。ここで,「INST
  259. ALL : [実行]」を左クリックするとインストールが開始されます。
  260.  具体的には,CCI.EXP とCCI.DOC をインストール先のディレクトリに複写します。
  261.  ファイルの複写が正常に終わると,アイテム登録が行われます。
  262.  
  263.  このように,install.cci は同じinstall.cci とディレクトリ上にある,CCI.EXP
  264. とCCI.DOC の2つのファイルをユーザーが指定したディレクトリに複写し,CCI.EXP
  265. をTownsMENU にアイテム登録をするプログラムです(ただし,このinstall.cci は
  266. サンプルプログラムのため,アイテム登録されたCCIを実行することはできません)。
  267.  複写するファイル名を変更すれば,他のプログラムのインストーラとして利用でき
  268. ます。
  269.  
  270. 【書式】
  271.         RUNCCI install
  272.  
  273. ●FIND.C              :パターン検索(コンソール用)
  274.  
  275.  find.cはテキストファイルの中から,任意の検索パターンを探し,検索パターン
  276. が見つかった行を表示するプログラムです。
  277.  検索パターンには正規表現が利用できます。
  278.  このプログラムはコマンドモードで使ってください。
  279.  
  280. 【書式】
  281.         RUNCCI find <検索パターン> <ファイル名>
  282.  
  283. 【使用例】
  284.         RUNCCI find buf find.c
  285.  
  286.  find.cの中から,"buf" という文字列が含まれている行を表示する。
  287.  
  288. ●FIND2.C            :パターン検索
  289.  
  290.  find2.c はテキストファイルの中から,任意の検索パターンを探し,検索パター
  291. ンが見つかった行を表示するプログラムです。
  292.  検索パターンには,正規表現が利用できます。
  293.  
  294.  起動すると,次のメニューが現れます。
  295.  
  296.     (U) Upcase              大文字,小文字を区別するモードの切り換え
  297.     (P) Input pattern       検索パターンの入力
  298.     (F) Find                検索開始
  299.  
  300.  まず「(U) Upcase」で,アルファベットの大文字・小文字を区別するかしないか
  301. の動作を決めます。最初は,Upcase [off],区別するになっています。一度実行す
  302. ると,Upcase [on] ,区別しないに切り替わります。
  303.  次に,「(P) Input pattern」 で検索パターンを入力します。
  304.  最後に,「(F) Find」を選択・実行します。実行すると,ファイルダイアログが
  305. 現れるので,検索するファイルを選択・指定してください。ファイルは複数指定で
  306. きます。
  307.  検索が終了すると,見つかった行の一覧が表示されます。このとき,マウスの右
  308. スイッチを押すと,最初のメニューに戻ります。
  309.  メニュー選択時にマウスの右スイッチを押すと,終了します。
  310.  
  311. 【書式】
  312.     RUNCCI find2
  313.  
  314. ●TIFLOAD.C        :TIFFデータの表示 
  315.  
  316.  tifload.c はTIF 形式の画像データファイルを表示するプログラムです。
  317.  起動すると,ファイルダイアログが現れるので表示したいTIFFデータファイルを
  318. 選択・指定してください。
  319.  データは,モノクロ,16色,256 色,32768 色に対応しています。
  320.  
  321. 【書式】
  322.     RUNCCI tifload
  323.  
  324.  
  325. **************************************************************************
  326. ☆  言語仕様
  327. **************************************************************************
  328.  
  329. ◎変数の型
  330.  
  331.     char, short, long, int
  332.     unsigned char, unsigned short, unsigned long, unsigned int
  333.     float, double
  334.  
  335.     ※signed intなどは必要無いのでサポ-トしていません。
  336.  
  337. ◎変数の定義
  338.  
  339.     int     i;
  340.     int    *ip;
  341.     char    buf[256];
  342.     char   *buf[256];
  343.     char    buf[2][5][6];
  344.     int     (*func)();
  345.  
  346.     などようにポインタやら配列の定義/参照ができます。
  347.  
  348. ◎クラス指定
  349.  
  350.     int         i;
  351.     static int  i;
  352.  
  353.     externはありません。
  354.  
  355. ◎変数の初期化
  356.  
  357.      スタック変数に対しては初期化はできませんがスタテックおよびグロ-バル
  358.     デ-タは初期化可能です。
  359.  
  360.      配列の場合,単純に左詰めで設定されされそのサイズのチェック及び自動割
  361.     り当ては行わられません。
  362.  
  363.     char    buf[] = { 1,2,3 };          /* これができません! */
  364.  
  365.      さらに変数のアドレスの初期化などもできません。
  366.  
  367.     int     *aaa[2] = { &dum, &dum2 };  /* これも駄目! */
  368.  
  369. ◎ステ-トメント
  370.  
  371.     if () ... else if () ... else ...
  372.     while () ...
  373.     do ... while ();
  374.     for ( ; ; ) ...
  375.     switch() case .. default..
  376.     break;
  377.     return;
  378.     goto ... LABEL:
  379.  
  380.     ほぼC言語と同じです
  381.  
  382. ◎演算
  383.  
  384.     (int ...)       型のキャスト
  385.     sizeof()        型のサイズ
  386.     sizeof ...      変数のサイズ(一次指定のみ)
  387.     xxx(...)        関数の呼び出し
  388.     &&, ||,
  389.     &, |, ^,
  390.     +, -, *, /, %,
  391.     >>, <<,
  392.     ==, !=
  393.     <, >,
  394.     <=, >=
  395.     !, ~, -
  396.     ? .. : ..
  397.     =
  398.     &=, |=, ^=,
  399.     +=, -=,
  400.     *=, /=, %=,
  401.     >>=, <<=,
  402.     ++, --,
  403.     * xx, & xx
  404.     xx [ nn ]
  405.  
  406.     これもほぼC言語と同じです
  407.  
  408. ◎プリプロセッサ
  409.  
  410.      プリプロセッサ命令は一切サポ-トしていません。
  411.     事前にcpp 等のプリプロセッサで処理しなければいけません
  412.  
  413.      ただしプロプロセッサに対応したエラ-処理時のソ-ス行表示を行う為の処
  414.     理のみしています。
  415.  
  416. ●注意
  417.  
  418.      このインタプリタは1パスで処理しています。したがって変数および関数は
  419.     参照される前に定義が必要です
  420.  
  421.      型チェックやメモリチェックなどはほとんどしていません。したがってポイ
  422.     ンタの間違った参照などで簡単に暴走します!
  423.  
  424.  
  425. **************************************************************************
  426. ☆  ライブラリ関数
  427. **************************************************************************
  428.  
  429.  CCI には,C標準ライブラリにある関数や,TOWNS 用の各種ライブラリ関数が内
  430. 蔵されています。
  431.  関数については,関数一覧を参照してください。
  432.  
  433.  このCCI に内蔵されているメニューやファイルダイアログ等のGUI 関連の機能は
  434. すべて16色画面モードで動作するように作られています。32768 色と 256色といっ
  435. た画面モードでは,これらの機能は使えませんので注意してください。
  436.  ただし,2画面合成モードで片方の画面を 32768色で使い,16色画面モードでメ
  437. ニューやファイルダイアログを動かしたり,一時的に画面を 256色画面モードに切
  438. り換えて使うことはできます。
  439.  
  440.  
  441. **************************************************************************
  442. ☆  最後に,
  443. **************************************************************************
  444.  
  445.  
  446.  CCI のオリジナルはMIYAZAKI 氏が作成されました。
  447.  CCI の作成にあたって,は森公一郎氏の作成されたKM-yacc ver 2.0 をHigh Cで
  448. 再コンパイルしたものを利用させていただきました。
  449.  CCI の浮動小数点演算,多次元配列,その他のバグフィクスは,EAST氏によるも
  450. のです。
  451.  MIYAZAKI氏,森公一郎氏,EAST氏にはこの場を借りてお礼申し上げます。
  452.  
  453.  
  454. **************************************************************************
  455. ☆  変更履歴
  456. **************************************************************************
  457.  
  458. ■  ver.1.01a   (ver.1.01からの変更点)
  459.  
  460.     ・CCI インタプリタをDLL にした
  461.     ・コードサイズのデフォルトを64Kから128Kバイトに増やした
  462.  
  463.